/**
 * \* Created with IntelliJ IDEA.
 * \* User: Administrator
 * \* Date: 2022/3/8
 * \* Time: 12:20
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */

//实例内部类
class OuterClass{//定义了一个普通类
    public int data1= 1;

    //实例内部类，可以把他当作外部类的一个普通实例的成员
    class InnerClass{
        public int data1=999;
        public InnerClass(){
            System.out.println("不带参数的内部类构造方法");
        }
        public void test(){
            System.out.println(OuterClass.this.data1);//1
            System.out.println(this.data1);
        }

    }
}


//实例内部类
class OuterClass1{//定义了一个普通类
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;
    //实例内部类，可以把他当作外部类的一个普通实例的成员
    class InnerClass{
        public int data4=4;
        private int data5 = 5;
        //public static int data6 = 6; //不能定义静态成员变量，因为如果一个东西是静态的，它是属于类的，不属于对象的
        //加final就可以，因为如果你非要定义的话，你只能定义一个静态常量
        public static final int data6 = 6;

        public InnerClass(){
            System.out.println("不带参数的内部类构造方法");
        }
        public void test(){
            System.out.println("InnerClass::test()");//输出一个字符串
        }
    }
    public void func1(){//构造方法
        //static int a = 10;//err, 属于类的，不属于对象、
        System.out.println("OuterClass::func1()");
    }
}




/**
 * 本地内部类
 */
public class TestDemo {
//    public void func(){
//        class  Test{
//            public int a;
//        }
//        //缺点：只能在当前方法中使用——本地内部类，定义在方法内部的类
//    }

    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        //OuterClass.InnerClass innerClass = new OuterClass.InnerClass();//ERR ，不能编译通过
        //需要外部类对象的引用
//实例化一个内部类对象
        OuterClass.InnerClass innerClass =  outerClass.new InnerClass();
        innerClass.test();
    }
}
